package com.ljx.genericity.genericity03;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 在引用传递中，在泛型操作中也可以设置一个泛型对象的==范围上限==和==范围下限==。
 * 范围上限使用extends关键字声明，表示**参数化的类型可能是所指定的类型或者是此类型的子类**，
 * 而范围下限使用super进行声明，表示参数化的类型可能是所指定的类型或者此类型的父类型。
 * @author LJX
 * @Description: 参数化的类型可能是所指定的类型或者是此类型的子类
 * @Date: 2022/10/25 16:21
 * @Version 1.0
 */
public class Test01 {
	public static void main(String[] args) {
		Ljl<Integer> ljl1 = new Ljl<>();
		ljl1.setE(123);
		show(ljl1);

		Ljl<Integer> ljl2 = new Ljl<>();
		ljl2.setE(123456);
		show1(ljl2);

		Ljl<Number> ljl3 = new Ljl<>();
		ljl3.setE(123456.123);
		show1(ljl3);
	}
	// 受下线的泛型类型，只能是其父类，或者本类
	public static  void show(Ljl<? super Integer> ljl){
		ljl.doSome();
	}
	// 受上限泛型类型，只能是本类或者子类
	public static  void show1(Ljl<? extends Number> ljl){
		ljl.doSome();
	}
}

@Data
@AllArgsConstructor
@NoArgsConstructor
class Ljl<T>{
	// 受上限泛型 <T extends Number> new 此类对象时，他的参数一定是这个受限泛型类型的子类或者本身，

	private T t;
	private T e;

	public void doSome(){
		System.out.println("t = " + t);
		System.out.println("e = " + e);
	}
}
